package com.pan.admin.generator.entity.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.gitee.apanlh.util.base.CollUtils;
import com.gitee.apanlh.util.base.Empty;
import com.gitee.apanlh.util.base.IteratorUtils;
import com.gitee.apanlh.util.valid.ValidParam;
import com.pan.admin.cache.FormLocalCache;
import com.pan.admin.generator.entity.ApiGenField;
import com.pan.admin.module.form.entity.FormPO;
import lombok.Data;

import java.util.List;

/**
 *  API生成字段模板VO
 *
 *  @author Pan
 */
@Data
public class ApiGenFieldTemplateVO {

    /** 标签 */
    private String label;
    /** 值 */
    private String value;
    /** 如果存在资质则返回该资质值 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<ApiGenFormMappingVO> listFormField;
    /** 返回默认选中类型类型 */
    private String javaType;

    public ApiGenFieldTemplateVO() {
        super();
    }

    public ApiGenFieldTemplateVO(String label, String value, String javaType) {
        this.label = label;
        this.value = value;
        this.javaType = javaType;
    }

    /**
     *  将原有字段模板，转换成对应前端展示模板
     *
     *  @param  listApiFieldTemplate        api生成字段模板
     *  @return List
     */
    public static List<ApiGenFieldTemplateVO> ofConvertVO(List<ApiGenField> listApiFieldTemplate) {
        if (ValidParam.isEmpty(listApiFieldTemplate)) {
            return Empty.list();
        }

        List<ApiGenFieldTemplateVO> listApiFieldTemplateVO = CollUtils.newArrayList();
        IteratorUtils.array(listApiFieldTemplate, t -> {
            ApiGenFieldTemplateVO apiGenFieldTemplateVO = new ApiGenFieldTemplateVO(t.getFieldChineseName(), t.getFieldName(), t.getJavaType());

            //  查找是否存在资质
            String fieldName = t.getFieldName();
            List<FormPO> listForm = FormLocalCache.getByMappingName(fieldName);

            //  为空直接返回
            if (ValidParam.isEmpty(listForm)) {
                listApiFieldTemplateVO.add(apiGenFieldTemplateVO);
                return ;
            }

            //  如果是年龄则不添加表单资质项
            if (fieldName.equals("age")) {
                listApiFieldTemplateVO.add(apiGenFieldTemplateVO);
                return ;
            }

            //  添加我方表单资质值
            List<ApiGenFormMappingVO> listFormFieldValue = CollUtils.newArrayList();
            IteratorUtils.array(listForm, form -> {
                //  返回的是:映射名称,映射值+中文名称
                ApiGenFormMappingVO apiGenFormMappingVO = new ApiGenFormMappingVO(fieldName, form.getMappingValue() + "-" + "(" + form.getFieldValue() + ")");
                listFormFieldValue.add(apiGenFormMappingVO);
            });

            apiGenFieldTemplateVO.setListFormField(listFormFieldValue);
            listApiFieldTemplateVO.add(apiGenFieldTemplateVO);
        });
        return listApiFieldTemplateVO;
    }
}
